// 这道题可以使用递归实现，新链表也不需要构造新节点，我们可以列举递归三个要素
// 终止条件：两条链表名分别为 l1 和 l2，当 l1 为空或 l2 为空时结束
// 返回值：每一层调用都返回排序号的链表头
// 本级递归内容：如果 l1 的 value 值更小，则将 l1.next 与排序好的链表头相接，l2 同理
// 其实递归就是程序内部维护了一个栈。这个题就是每次把最小值压入栈，最后出栈的时候，将所有数连在一起
// 就行了。说白了，就是用一个栈维护了顺序。最后的连接，当然是小的连小的，l1 小，就连到 l1，l2 小就
// 连到 l2，就是最小的头结点

var mergeTwoLists = function (l1, l2) {
  if (l1 == null) return l2;
  if (l2 == null) return l1;
  if (l1.value < l2.value) {
    l1.next = mergeTwoLists(l1.next, l2);
    return l1;
  } else {
    l2.next = mergeTwoLists(l1, l2.next);
    return l2;
  }
};
